#ifndef _atomic_0826_data_preprocessing_service_H_
#define _atomic_0826_data_preprocessing_service_H_

/*------------------------ Include Begin --------------------------*/

// C
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <string>
#include <math.h>
#include <time.h>
#include <ctype.h>

// C++
#include <iostream>
#include <fstream>
#include <chrono>
#include <string>
#include <random>
#include <cmath>
#include <vector>
#include <map>
#include <set>
#include <stdbool.h>
#include <mutex>
#include <chrono>
#include <sstream>

/*------------------------  Include End  -------------------------*/

/*------------------------  Service Info Begin  --------------------------*/
/**
 *
 * @name:     atomic_0826_data_preprocessing_service
 * @chinese_name: 导航数据预处理
 * @description: 对多源导航传感器数据进行校准、时间同步与噪声过滤
 * @version: V1.0.0
 * @build_time: 2025-08-26 16:00:00
 * @license: MIT
 * @service_path: atomic_0826_data_preprocessing_service
 *
 * @resource_requirement:
 *         + cpu_architecture: x86_64
 *         + memory: 4GB
 *         + hard_disk: 50GB
 *
 * @developer:
 *      +name: twilight
 *      +email: twilight@atomic_0826_data_preprocessing_service.com
 * @maintainer:
 *      +name: twilight
 *      +email:twilight@atomic_0826_data_preprocessing_service.com
 * @operating_system:
 *      +name:Linux
 *      +v1:5.13.0-117-generic
 *      +v2:5.14.0-117-generic
 *      +name:SylixOS
 *      +v1:1.0.0
 *      +v2:1.0.2
 *
 *
 *
 */
/*------------------------  Service Info End  --------------------------*/

/*------------------------  Return Type Begin  --------------------------*/

#define ATOMIC_SERVICE_SUCCESS 0
#define ATOMIC_SERVICE_FAIL -1
#define ATOMIC_SERVICE_TIMEOUT -2
#define ATOMIC_SERVICE_ERROR -3
#define ATOMIC_SERVICE_NOT_SUPPORT -4
#define ATOMIC_SERVICE_NOT_READY -5
#define ATOMIC_SERVICE_NOT_INIT -6
#define ATOMIC_SERVICE_NOT_START -7
#define ATOMIC_SERVICE_NOT_STOP -8
#define ATOMIC_SERVICE_NOT_RELEASE -9
#define ATOMIC_SERVICE_NOT_DESTROY -10
#define ATOMIC_SERVICE_NOT_CREATE -11
#define ATOMIC_SERVICE_NOT_OPEN -12
#define ATOMIC_SERVICE_NOT_CLOSE -13
#define ATOMIC_SERVICE_NOT_READ -14
#define ATOMIC_SERVICE_NOT_WRITE -15
#define ATOMIC_SERVICE_NOT_SEEK -16
#define ATOMIC_SERVICE_NOT_TELL -17
#define ATOMIC_SERVICE_NOT_SIZE -18
#define ATOMIC_SERVICE_NOT_SEEK_END -19
#define ATOMIC_SERVICE_NOT_SEEK_SET -20
#define ATOMIC_SERVICE_NOT_SEEK_CUR -21
#define ATOMIC_SERVICE_NOT_SEEK_ABS -22

/*------------------------  Return Type End  --------------------------*/



/*------------------------  Message Info Begin  --------------------------*/

// 导航数据预处理输入
typedef struct
{
    // GPS原始数据
    double gps_time;        // 时间戳(秒)
    double gps_lat;         // 纬度(度)
    double gps_lon;         // 经度(度)
    float gps_alt;          // 海拔(米)
    float gps_hdop;         // 水平精度因子

    // IMU原始数据
    double imu_time;        // 时间戳(秒)
    float imu_acc_x;        // X轴加速度(m/s²)
    float imu_acc_y;        // Y轴加速度(m/s²)
    float imu_acc_z;        // Z轴加速度(m/s²)
    float imu_gyro_x;       // X轴角速度(rad/s)
    float imu_gyro_y;       // Y轴角速度(rad/s)
    float imu_gyro_z;       // Z轴角速度(rad/s)
    float imu_mag_x;        // X轴磁力计(uT)
    float imu_mag_y;        // Y轴磁力计(uT)
    float imu_mag_z;        // Z轴磁力计(uT)

    // 校准参数
    float imu_acc_bias_x;   // X轴加速度计零偏
    float imu_acc_bias_y;   // Y轴加速度计零偏
    float imu_acc_bias_z;   // Z轴加速度计零偏
    float imu_gyro_bias_x;  // X轴陀螺仪零偏
    float imu_gyro_bias_y;  // Y轴陀螺仪零偏
    float imu_gyro_bias_z;  // Z轴陀螺仪零偏
} NavPreprocessInput;

// 导航数据预处理输出
typedef struct
{
    int data_valid;                  // 数据有效性(1:有效,0:无效)
    double sync_time;                // 同步后时间戳(秒)
    
    // 处理后GPS数据
    double gps_lat_rad;              // 纬度(弧度)
    double gps_lon_rad;              // 经度(弧度)
    float gps_alt_smoothed;          // 平滑后海拔(米)

    // 处理后IMU数据（校准后）
    float imu_acc_calib_x;           // X轴校准后加速度(m/s²)
    float imu_acc_calib_y;           // Y轴校准后加速度(m/s²)
    float imu_acc_calib_z;           // Z轴校准后加速度(m/s²)
    float imu_gyro_calib_x;          // X轴校准后角速度(rad/s)
    float imu_gyro_calib_y;          // Y轴校准后角速度(rad/s)
    float imu_gyro_calib_z;          // Z轴校准后角速度(rad/s)
    
    int return_type;                 // 服务返回类型

    // 注意：原结构体中存在重复的sync_time成员，此处保留一个（可根据实际需求调整）
    
    // 预处理后GPS数据
    float gps_alt;                   // 海拔(米)
    int gps_valid;                   // GPS数据有效性(1:有效,0:无效)
    
    // 预处理后IMU数据
    float imu_acc_x;                 // X轴加速度(m/s²)
    float imu_acc_y;                 // Y轴加速度(m/s²)
    float imu_acc_z;                 // Z轴加速度(m/s²)
    float imu_gyro_x;                // X轴角速度(rad/s)
    float imu_gyro_y;                // Y轴角速度(rad/s)
    float imu_gyro_z;                // Z轴角速度(rad/s)
    int imu_valid;                   // IMU数据有效性(1:有效,0:无效)
    
    // 辅助数据
    float odom_speed;                // 里程计速度(m/s)
    int odom_valid;                  // 里程计数据有效性(1:有效,0:无效)
} NavPreprocessOutput;


/*------------------------  Message Info End  --------------------------*/

// 度转弧度
#define DEG_TO_RAD(deg) ((deg) * M_PI / 180.0)

/*------------------------  Interface Declaration Begin  --------------------------*/

int getNavPreprocessData(NavPreprocessInput *input, NavPreprocessOutput *output);


/*------------------------  Interface Declaration End  --------------------------*/



#endif // _atomic_0826_data_preprocessing_service_H_
